package controlador;

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import vista.Mensaje;
import vista.VentanaPrincipal;
import vista.VentanaProfesor;
import modelo.Seccion;
import modelo.Profesor;

public class EscuchadorVentanaProfesor extends WindowAdapter implements ActionListener,ItemListener ,KeyListener,FocusListener

{
    private VentanaProfesor referencia;
    private Seccion seccion;

    public EscuchadorVentanaProfesor(VentanaProfesor referencia,Seccion seccion)
    {
        this.referencia= referencia;
        this.seccion= seccion;
    }

    private void cerrarVentana()
    {
       new VentanaPrincipal(seccion);
       this.referencia.setVisible(false);
       this.referencia.dispose();
    }

    public void windowClosing(WindowEvent evt)
    {
        cerrarVentana();
    }
    public void windowOpened(WindowEvent evt)
    {
        inicializarVentana();
    }

    public void actionPerformed(ActionEvent e)
    
    {       	
    	
        Profesor profesor;
        if (e.getSource()==this.referencia.getBtnNuevoGuardar())
        {
             if (seccion.getProfesor() == null){
            	 
             
              String cedula;
              if (this.referencia.getRbVenezolano().isSelected())
                    cedula= "V-";
              else
                    cedula= "E-";
                
              cedula += this.referencia.getTxtCedula().getText();
                
              String titulo;
              if (this.referencia.getCbTitulos().getSelectedIndex() != 4)
            	  titulo=this.referencia.getCbTitulos().getSelectedItem().toString();
              else
            	  titulo=this.referencia.getTxtTituloAcademico().getText();
              
              profesor = new Profesor(cedula,this.referencia.getTxtNombre().getText(),this.referencia.getTxtApellido().getText(),titulo);

              if (profesor.validar())
              {
            	     if (Mensaje.mostrarConfirmacion("¿Desea Asignar este profesor?"))
            	     {            		  
            		    seccion.setProfesor(profesor);
            		    Mensaje.mostrarInformacion("El Profesor fue asignado con exito");     		    
            	     }   
            	  
              }
              else 
            	  Mensaje.mostrarError("!Los Datos del Profesor no son Validos¡");
              
             }
             
             else if (Mensaje.mostrarConfirmacion("Hay un Profesor asignado a la seccion.¿Desea asignar otro?"))
            	seccion.setProfesor(null);
             	
             inicializarVentana();
              
        }
        else if(e.getSource()==this.referencia.getBtnModificar())
        {
             profesor= seccion.getProfesor();
             if (profesor!=null)
             {
            	 String titulo;
                try
                {
                  Profesor profesorCopia = (Profesor) profesor.clone();
                  
                  if (this.referencia.getCbTitulos().getSelectedIndex() != 4)
                	  titulo=this.referencia.getCbTitulos().getSelectedItem().toString();          
                  else
                	  titulo=this.referencia.getTxtTituloAcademico().getText();
                  
                  profesorCopia.setNombre(this.referencia.getTxtNombre().getText());
                  profesorCopia.setApellido(this.referencia.getTxtApellido().getText());
                  profesorCopia.setTitulo(titulo); 
                  
                  if (profesorCopia.validar())
                  {

                    if (Mensaje.mostrarConfirmacion("¿Desea Modificar a este Profesor?"))
                    {
                        profesor.setNombre(profesorCopia.getNombre());
                        profesor.setApellido(profesorCopia.getApellido());	
                        profesor.setTitulo(profesorCopia.getTitulo());
                        Mensaje.mostrarInformacion("El Profesor se ha Modificado con Exito");
                    }
                  }
                  else
                    Mensaje.mostrarError("!Los Datos del Profesor no son Validos!");
                }
                catch(CloneNotSupportedException excepcion)
                {
                    Mensaje.mostrarError("!Error Actualizando los Datos del Profesor!");
                }
             }

             inicializarVentana();
        }
        else if(e.getSource()==this.referencia.getBtnEliminar())
        {
            if (seccion.getProfesor() != null)
            {            	

                 if (Mensaje.mostrarConfirmacion("¿Desea Eliminar a este Profesor?"))
                 {
                     seccion.setProfesor(null);
                	 Mensaje.mostrarInformacion("El Profesor se ha Eliminado con Exito");
                	 inicializarVentana();
                 }   
            }     
        }
        else if(e.getSource()==this.referencia.getBtnSalir())
        {
            cerrarVentana();
        }
    }    

    public void itemStateChanged(ItemEvent e)
    {
         if(e.getSource()==this.referencia.getCbTitulos())
         {
             if (this.referencia.getCbTitulos().getSelectedIndex()!=4)
             {
                 this.referencia.getTxtTituloAcademico().setVisible(false);
             }
             else
             {
            	 this.referencia.getTxtTituloAcademico().setText("");
                 this.referencia.getTxtTituloAcademico().setVisible(true);
             }
             
           
              
         }
    }
    
    public void keyPressed(KeyEvent e) 
    {
    	
    }
    public void keyReleased(KeyEvent e){}

    public void focusGained(FocusEvent e){}

    public void focusLost(FocusEvent e){}

    
    private void inicializarVentana()
    {       
            
            if (seccion.getProfesor() == null )
            {	
            	this.referencia.getTxtCedula().setEnabled(true);
                this.referencia.getRbExtranjero().setEnabled(true);
                this.referencia.getRbVenezolano().setEnabled(true);
                this.referencia.getTxtCedula().setText("");
	            this.referencia.getTxtNombre().setText("");
	            this.referencia.getTxtApellido().setText("");
	            
	            String tituloAcademico;
	            if (this.referencia.getCbTitulos().getSelectedIndex()!=4)
	            	tituloAcademico= this.referencia.getCbTitulos().getSelectedItem().toString(); 
	            else
	            	tituloAcademico= this.referencia.getTxtTituloAcademico().getText();
	            
	            this.referencia.getRbVenezolano().setSelected(true);
	            this.referencia.getBtnNuevoGuardar().setEnabled(true);            
	            this.referencia.getBtnEliminar().setEnabled(false);
	            this.referencia.getBtnModificar().setEnabled(false);
	            
	            
            }
            else
            {         
	            
                boolean bandera=false;
                int i;
            	   
            	for (i=0; i < this.referencia.getCbTitulos().getItemCount(); ++i)   
            	   if (this.referencia.getCbTitulos().getItemAt(i).equals(seccion.getProfesor().getTitulo()))
            	   {	   
            	      bandera=true;
            	      break;
            	   }   
            	
	            if (seccion.getProfesor().getCedula().substring(0, 1).equalsIgnoreCase("V"))
	            	this.referencia.getRbVenezolano().setSelected(true);
	            else
	 	            this.referencia.getRbExtranjero().setSelected(true);
	            
	            this.referencia.getTxtCedula().setText(seccion.getProfesor().getCedula().substring(2, seccion.getProfesor().getCedula().length()));
	            this.referencia.getTxtNombre().setText(seccion.getProfesor().getNombre());
	            this.referencia.getTxtApellido().setText(seccion.getProfesor().getApellido());
	          
	            if (bandera)
	            {
	            	this.referencia.getCbTitulos().setSelectedIndex(i);
	                this.referencia.getTxtTituloAcademico().setVisible(false);	
	            }
	            else
	            {
	            	this.referencia.getCbTitulos().setSelectedIndex(4);
	            	this.referencia.getTxtTituloAcademico().setVisible(true);
	            	this.referencia.getTxtTituloAcademico().setText(seccion.getProfesor().getTitulo());
	            }	
	            
	            this.referencia.getBtnNuevoGuardar().setEnabled(true);            
	            this.referencia.getBtnEliminar().setEnabled(true);
	            this.referencia.getBtnModificar().setEnabled(true);
	            
	            this.referencia.getTxtCedula().setEnabled(false);
                this.referencia.getRbExtranjero().setEnabled(false);
                this.referencia.getRbVenezolano().setEnabled(false);
            }
        
    }

	@Override
	public void keyTyped(KeyEvent e) 
	{
            if (e.getSource()==this.referencia.getTxtCedula())
            {
                if (!Character.isDigit(e.getKeyChar()))
                   e.setKeyChar(Character.MIN_VALUE);
            }
            else if(e.getSource()==this.referencia.getTxtNombre())
            {
               if (!Character.isLetter(e.getKeyChar()) && !Character.isSpaceChar(e.getKeyChar()))
                   e.setKeyChar(Character.MIN_VALUE);
            }
            else if(e.getSource()==this.referencia.getTxtApellido())
            {
                if (!Character.isLetter(e.getKeyChar()) && !Character.isSpaceChar(e.getKeyChar()))
                    e.setKeyChar(Character.MIN_VALUE);
            }
		
	}

    

}
